package cn.wzx.controller;

import cn.wzx.entity.Order;
import cn.wzx.entity.OrderLine;
import cn.wzx.respJson.RespJson;
import cn.wzx.service.OrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.*;

import java.beans.PropertyEditorSupport;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@RestController
@RequestMapping("/api/adm/ord")
public class OrdAdmController {
    @Autowired
    OrderService orderService;

    // 日期格式化
    @InitBinder
    public void initBinder(final WebDataBinder webdataBinder){
        webdataBinder.registerCustomEditor(java.util.Date.class, new PropertyEditorSupport(){
            @Override
            public void setAsText(String text) throws IllegalArgumentException{
                if (text.indexOf("-")>0){
                    if (text.indexOf("")<1){
                        text = text + " 00:00:00";
                    }
                    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd" +
                            "HH:mm:ss");
                    try {
                        Date d = sdf.parse(text);
                        setValue(d);
                    }catch (Exception e){
                        System.out.println("书本日期错误...." + text );
                        setValue(new Date()); //毫秒
                    }
                }else {
                    setValue(new Date(Long.valueOf(text))); //毫秒
                }
            }
        });
    }

    // 查询订单头信息(含用户信息) 有分页功能
    @RequestMapping("/findOrdInfo/{start}/{num}")
    public Map<String, Object> findOrdInfo(Integer ispay, Date tstart, Date tend, String account, String phone, String nickname, @PathVariable("start") Integer start, @PathVariable("num") Integer num) {
        System.out.println("nickname===============" + nickname);
        // 第一个map用来接收数据调用sql查询
        // 第二个map用来接收查询后的数据返回给前端
        Map<String, Object> map = new HashMap<>();
        Map<String,Object> map2 = new HashMap<>();
        map.put("start", start * num);
        map.put("num", num);
        // 动态条件查询，有哪些信息传入就只通过传入的信息进行查询
        if (account != null) map.put("account", account);
        if (phone != null) map.put("phone", phone);
        if (nickname != null) map.put("nickname",nickname);
        if (ispay != null) map.put("ispay", ispay);
        if (tstart != null) map.put("tstart", tstart);
        if (tend != null) map.put("tend", tend);
        try {
            //动态条件查询，模糊查询，有值传入就查询，没有值就跳过，查询到用户所有订单头信息包括用户信息
            List<OrderLine> lst = orderService.findOrdLines(map);
            // 计算总页数
            int total = orderService.count(map);
            map2.put("total", total);
            map2.put("orders", lst);
            return RespJson.pack(200, "", map2);
        }catch (Exception e){
            e.printStackTrace();
            return RespJson.pack(500,"查询失败",null);
        }
    }

    // 添加发货单号
    @RequestMapping("/addShip")
    public Map<String,Object> addShip(@RequestBody Order ord){
        System.out.println("ord============" + ord);
        orderService.addShip(ord);
        return RespJson.pack(200, "添加快递成功", null);
    }

    // 根据 订单 id, 查找该订单对应的订单明细信息(含书本)
    @RequestMapping("/findItemInfoByOrdid/{ordid}")
    public Map<String, Object> findItemInfoByOrdid(@PathVariable("ordid") Integer ordid) {
        // 根据订单ID找到该订单明细及对应的书本信息
        List<Map<String, Object>> lst = orderService.findItemInfoByOrdid(ordid);
        return RespJson.pack(200, "", lst);
    }
}
